#include <jni.h>
#include <iconv.h>
#include <cstring>
#include <iconv_cd.h>
#include "tools.h"
#include "bcd_ascii.h"
#include "stdlib.h"
#include "log.h"
#include "hex.h"
char* get_version(){

    return "1.0\0\n";
}

extern "C"
JNIEXPORT jstring JNICALL
Java_cd_tools_Tools_getVersion(JNIEnv *env, jclass type) {

    return env->NewStringUTF(get_version());
}

extern "C"
JNIEXPORT void JNICALL
Java_cd_tools_Tools_test(JNIEnv *env, jclass type) {

//    const unsigned char ascii[12] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C'};
//    unsigned char bcd[6];
//
//    asc2bcd(bcd, ascii, (uint32_t)12);
//
//    int i = 0;
//
//    LOGD("ascii = %s\n", ascii);
//
//    for(; i < 6; i++) {
//        LOGD("bcd = 0x%.2x\n", bcd[i]);
//    }
//
//    unsigned char ascii2[13] = {0};
//    const unsigned char bcd2[6] = {0x01, 0x23, 0x45, 0xCD, 0xEF, 0xAB};
//    bcd2asc(ascii2, bcd2, 6);
//    LOGD("ascii = %s\n", ascii);

//    uint8_t hex[] = {0x01,0x03};
//    print_hex(hex, sizeof(hex));


    /* 目的编码, TRANSLIT：遇到无法转换的字符就找相近字符替换
   *          IGNORE  ：遇到无法转换字符跳过*/
    //char *encTo = "UNICODE//TRANSLIT";
    char *encTo = "UTF-8//IGNORE";
    /* 源编码 */
    char *encFrom = "UTF-16LE";

    /* 获得转换句柄
   *@param encTo 目标编码方式
   *@param encFrom 源编码方式
   *
   * */
//    iconv_t cd = iconv_open (encTo, encFrom);
//    if (cd == (iconv_t)-1)
//    {
//        perror ("iconv_open");
//    }
//    /*注意：inbuf和outbuf都必须是有存储空间的不能定义为常量，如：char *inbuf = "abc"
//     * 或者是char *outbuf = "123"这样定义都是错误的。另外inbuf，inbytesleft，outbuf，
//     * outbytesleft这几个参数在使用过程中都会改变，最好是先保存一下原值，然后再使用*/
//
///* 存放转换后的字符串 */
    size_t outlen = 1024;
    char outbuf[outlen];
    memset (outbuf, 0, outlen);
//
//    /* 由于iconv()函数会修改指针，所以要保存源指针 */
    uint8_t s2[] = {0xed,0x90 ,0xfa ,0x5e  ,0x87 ,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//    int s1_len = 7;
//    char *srcstart = (char *)s2;
//    char *tempoutbuf = outbuf;
//
//    /* 进行转换
//  *@param cd iconv_open()产生的句柄
//  *@param srcstart 需要转换的字符串
//  *@param srclen 存放还有多少字符没有转换
//  *@param tempoutbuf 存放转换后的字符串
//  *@param outlen 存放转换后,tempoutbuf剩余的空间
//  *
//  * */
//    size_t ret = iconv (cd, &srcstart, (size_t*)&s1_len, &tempoutbuf, &outlen);
//    if (ret == -1)
//    {
//        perror ("iconv");
//    }
//
//    iconv_close (cd);
//    LOGD("%s\n",outbuf);

    int ret = iconv_cd(encTo, encFrom, (char*)s2, sizeof(s2), (char*)outbuf, sizeof(outbuf));
    LOGD("ret = %d\n",ret);
    LOGD("iconv_cd = %s\n",outbuf);
}